package collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 针对数组操作的工具类  Arrays
 */
public class ArraysDemo {
    public static void main(String[] args) {

        int[] arr = {4, 1, 5, 8, 2, 9};
        System.out.println(Arrays.toString(arr));// 输出 原始数组 [4, 1, 5, 8, 2, 9]

        //对arr进行排序，默认是从小到大。
        Arrays.sort(arr);
//        Arrays.sort(arr,1,3);  //根据范围索引部分对数组进行排序,索引包头不包尾
        System.out.println(Arrays.toString(arr));// 输出 排序[1, 2, 4, 5, 8, 9]

        //二分查找(折半查找),数组必须是按升序排列好
        System.out.println(Arrays.binarySearch(arr, 4));//返回值为2
        System.out.println(Arrays.binarySearch(arr, 7));//返回值为-5,负的插入点-1


        //用88来填充整个数组
        Arrays.fill(arr, 88);
//        Arrays.fill(arr,77,0,4); //根据范围替换,索引包头不包尾
        System.out.println(Arrays.toString(arr));//[88, 88, 88, 88, 88, 88]


        int[] arr1 = {1, 2, 3, 4};
        int[] arr2 = {1, 2, 3, 4};
        int[] arr3 = {2, 3, 1, 4};
        System.out.println(Arrays.equals(arr1, arr2));//true
        System.out.println(Arrays.equals(arr1, arr3));//false


        //数组转集合
        String[]str1={"123","234","234"};
        List<String> list2 = Arrays.asList(str1); //采坑,固定长度的集合,添加就报错
        list2.add("haha");   // throw "java.lang.UnsupportedOperationException"
//        List<String> list1 = Arrays.asList("哈哈哈", "haha");

//        int[] i={1,2,3};//采坑,8种基本数据类型不能被用在asList方法的泛型变长参数中,只能是包装类
        Integer[] i={1,2,3};
        List<Integer> asList = Arrays.asList(i); //固定长度的集合,添加就报错
        asList.add(55);  // throw "java.lang.UnsupportedOperationException"

        List list1=new ArrayList(Arrays.asList(i)); //采坑,如果对Arrays.asList(i)转换的集合操作,需要再次进行转换
        list1.add(123);

        //集合转数组
        List<String> list=new ArrayList<>();
        list.add("abc1");
        list.add("abc2");
        list.add("abc3");
        list.add("abc4");
        String[] str  = list.toArray(new String[list.size()]); //当集合转换数组时,数组长度如果小于等于集合的size时,转换后的数组长度等于集合的size,如果数组的长度大于了size,分配的数组长度就和你指定的长度一样

        //数组与数组的复制及覆盖
        byte[] srcBytes = new byte[]{2, 4, 0, 0, 0, 0, 0, 10, 15, 50};
        byte[] destBytes = new byte[]{0,10, 15, 50,20};
        byte[] destBytes1 = new byte[srcBytes.length];
        System.arraycopy(srcBytes, 0, destBytes, 1, 2);  //-> 0,2,4,50,20  //替换
        System.arraycopy(srcBytes, 0, destBytes1, 0, destBytes1.length);    //复制
        for (int j = 0; j < destBytes.length; j++) {
            System.out.print("-> " + destBytes[j]);

        }
    }
}
